Homomorphic Encryption
「プライベートMLにおいて入力の秘匿は最も重要な問題の一つである」
Homomorphic Encryption(準同形暗号):
暗号化されたデータに対して計算を可能にする暗号の一種で、暗号化された出たに対して演算を行い、その結果を復号化することは、暗号化されていない状態で同様の演算を行うことと等価である。
X + Y = Z
x(Enc) + y(Enc) = z(Enc)
Z = z(Enc) => z(Dec)
が成立する。
メリット:
暗号化されたデータに対して推論を行うことができるため、モデルの所有者はクライアントの個人データを見ることができず、漏洩や悪用ができない。
デメリット:
計算コストが高い。
特定の種類の計算に限定される。
Pailler
code: Pailler
import syft as sy
import torch as th
hook = sy.TorchHook(th)
pub, pri = sy.keygen()
x = th.tensor(1, 2, 3).encrypt(protocol="paillier", public_key=pub) y = th.tensor(2, 2, 2).encrypt(protocol="paillier", public_key=pub) sum = x + y
print(sum.decrypt(protocol="paillier", private_key=pri))
XOR, AND, NOTを使用することで2つの2値変数を組み合わせた16通りの関数を作れる。 Somewhat homomorphic encryption(SWHE):
ある程度同そうな暗号化が可能な方式をベースとする傾向がある。
暗号文に対して限られた回数の乗算や加算を連続して行うことが出来ない。
信頼性が低下し復号化が出来ない。